﻿#pragma once
#include "afxdialogex.h"
#include <MVIDCodeReader.h>
#include <MvCodeReaderCtrl.h>
#include <list>
#include "Other.h"
#include <map>
#include "LogisticsBase/CApi/CApiLogisticsBaseInterface.h"//华睿智能相机 
#include "ExportQuickScanApi.h"
// DeviceList 对话框
 
#define MaxDeviceNum          256             //最大支持设备数量

typedef struct DevInfo
{
    bool      DevPro[MaxDeviceNum]{ false }; //是否开启 
    bool      Check[MaxDeviceNum] = { 0 };   //是否勾选
    uint8_t   DevState[MaxDeviceNum]{ false }; //状态 
    bool      state = 0;                     //总状态
    UINT8     LastNum = 0;                   //上次扫描到的数量
    UINT8     CheckNum = 0;                  //扫描到的设备数量
    UINT8     OnDevNum = 0;                  //打开的相机数目
    CString   Type = NULL;                   //支持的相机型号 
    uint8_t   FeedId[MaxDeviceNum] = { 0 };  //供包台ID
    CString   Ip[MaxDeviceNum] = { 0 };      //相机IP
    string    Ip_str[MaxDeviceNum];          //相机IP
    CString   Name[MaxDeviceNum] = { 0 };    //相机名称
    CString   Ves[MaxDeviceNum] = { 0 };     //相机版本 
    CString   Number[MaxDeviceNum] = { 0 };  //相机序列号
    string    SN_str[MaxDeviceNum];          //相机序列号
    CString   Mac[MaxDeviceNum] = { 0 };     //相机MAC地址
    CString   NetIp[MaxDeviceNum] = { 0 };   //相机网口IP
    CListCtrl   List{};                         //列表 

    uint16_t  TrayNo[MaxDeviceNum] = { 0 };  //托盘号
    uint64_t  TrayTime[MaxDeviceNum];           //收到托盘时间
    int       TrayY[MaxDeviceNum] = { 800,800,800,800,800,800,800,800 };  //托盘坐标 
     
    uint8_t                 c_fps[MaxDeviceNum] = { 0 }; //帧率 
    CString                 c_Mbps[MaxDeviceNum] = { L"%d.网口IP：0\r\n带宽：0Mbps 0Fps0\r\n" };       //相机网口带宽 
    bool                    c_Mb[MaxDeviceNum] = { true };  //判断千兆网
}DevInfo;

class DeviceList : public CDialogEx
{
	DECLARE_DYNAMIC(DeviceList)

public: 
    DeviceList(CWnd* pParent = nullptr);   // 标准构造函数
	virtual ~DeviceList();

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_DeviceList };
#endif

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持
	DECLARE_MESSAGE_MAP()
         
private:
    CString AppPath;
    CString ConfigPath;
    BOOL                                ListOne = FALSE;        //首次进入子窗体
    Other                               Oth;                    //其它常用
    afx_msg void OnDestroy();  //窗口即将销毁 
    HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);    //正在绘制控件
    //工业相机
    CListCtrl                           List0{};                //列表-工业相机 
    afx_msg void BnClickedCamera0();                            //扫描工业相机
    //智能相机
    CListCtrl                           List1{};                //列表-智能相机 
    MV_CODEREADER_DEVICE_INFO_LIST      Dev1InfoList;           //设备信息列表
    afx_msg void BnClickedCamera1();                            //扫描智能相机
public:
    char* DaHuaPath1 = Oth.CStrToCh(Oth.GetAppPath() + L"Setting/LogisticsBase.cfg");
    void ListAllCameraCodeInfoC(const AllCameraCodeInfo* allCameraInfo);// 包裹包裹所有相机信息回调函数
    void ListRunResultC(const char* key, const VslbRunResult* results);// 主回调信息处理 
    //中科微至
public:
    void zhong_wei_camera_infos(QuickScanSystemCameraInfoCpp* info, void* pUser); //中科微至
public:
    DevInfo     Hik0;
    DevInfo     Hik1;
	DevInfo     Dh1;
    DevInfo     Zw0;
    CEdit EditHik0;
    CEdit EditHik1;
    CEdit EditDh1;
    CEdit EditZw0;
     
    UINT8       Camera1Num = 0;           //扫描到的设备数量
	BOOL        Device1Check[MaxDeviceNum] = { 0 };
    CString     Device1Ip[MaxDeviceNum] = { 0 };
    CString     Device1Name[MaxDeviceNum] = { 0 };
    CString     Device1Ves[MaxDeviceNum] = { 0 };
    CString     Device1Number[MaxDeviceNum] = { 0 };
    CString     Device1Mac[MaxDeviceNum] = { 0 };
    CString     Device1NetIp[MaxDeviceNum] = { 0 };
     
    void GetConfig();   //读取配置文件
    afx_msg void OnBnClickedDahuacamera0();
    void SetConfig();
    afx_msg void OnBnClickedZhongweicamera0(); 
    afx_msg void OnBnClickedCameraipconfigs(); 
    afx_msg void OnEnKillfocusEdit1Cameralisthik0();
    afx_msg void OnEnKillfocusEdit1Cameralisthik1();
    afx_msg void OnEnKillfocusEdit1Cameralistdh1();
    afx_msg void OnEnKillfocusEdit1Cameralistzw0();
    afx_msg void OnNMDblclkList1(NMHDR* pNMHDR, LRESULT* pResult);
    afx_msg void OnNMDblclkList0(NMHDR* pNMHDR, LRESULT* pResult);
    afx_msg void OnNMDblclkZhongweilist0(NMHDR* pNMHDR, LRESULT* pResult);
};
